package SecondeStage.ChangYongLei.String;

public class StringDetil {
    public static void main(StringDetil[] args) {
        // 1.String对象用于保存字符串，也就是一组字符序列
        // 2.字符串的字符使用Unicode字符编码，一个字符占2个字节
        // 3.String类常用构造器：
//        String s1 =new String();
//        String s2 =new String(String original);
//        String s3 =new String(char[] chars);
//        String s4 =new String(char[] chars,int startIndex,int count);
//        String s5 =new String(byte[] bytes);

        // 4.String 类实现了接口 Serializable, String可以串行化，可以在网络上传输
        // 5.String 类实现了接口 Comparable ,String 对象可以比较大小
        // 6.String 类是final类，不能被继承
        // 7.String 有属性，private final char value[]; 用于存放字符串内容
        // 8.一定要注意: value是一个final类型，不可以修改（value不能指向新的地址，但单个字符内容可以变化）
        final char[] value = {'a','b','c'};
        char[] v2 ={'t','o','m'};
        value[0] = 'H'; // 可以
        //value = v2; // 不可以修改value的地址

        // 两种创建String对象的方式
        // 1. 直接赋值: 先从常量池查看是否有"hello"数据空间，如果有，直接指向，如果没有则重写创建，然后指向。
        // s最终指向的是常量池的空间地址
        String s ="hello";
        // 2. 调用构造器:先在堆中创建空间，里面维护了value属性，指向常量池的hello空间。如果常量池中没有hello，重新创建，
        // 如果有，直接通过value指向。最终指向的是堆中的空间地址
        String s2 =new String("hello");
        // 由于s和s2指向的地址不同，所以s和s2不是同一个对象
    }
}
